package com.topscomm.file.convert.ffmpeg;

import java.io.File;
import java.io.InputStream;

import com.topscomm.basic.exception.ServiceException;
import com.topscomm.core.FileFormatEnum;
import com.topscomm.file.convert.IFileConvertService;
import com.topscomm.file.task.FileProcessProgressCache;
import com.topscomm.file.util.FileUtil;

/**
 * ffmpeg视频、音频文件处理
 * 
 * @description:
 * @author: donghang
 * @date: 2021年3月17日上午8:23:50
 * @modify:
 */
public class FfmpegFileConvertService implements IFileConvertService {
	/**
	 * 
	 * @description:
	 * @param filePath
	 * @param targetPath
	 * @return
	 * @author: donghang
	 * @date: 2021年3月17日上午9:19:16
	 * @modify:
	 */
	@Override
	public String convertFile(String identifier, String filePath, String targetPath) throws Exception {
		return this.convertFile(identifier, filePath, targetPath, FileFormatEnum.HLS);
	}

	/**
	 * 
	 * @description:
	 * @param filePath
	 * @param targetPath
	 * @param targetFileFormat
	 * @return
	 * @author: donghang
	 * @date: 2021年3月17日上午9:19:19
	 * @modify:
	 */
	@Override
	public String convertFile(String identifier, String filePath, String targetPath, FileFormatEnum targetFileFormat)
			throws Exception {
		String mimeType = FileUtil.getMimeType(filePath).toLowerCase();
		if (FileUtil.matchMimeType(mimeType, FileFormatEnum.AUDIO.mimeType)) { // 音频
			return FfmpegFileAudioConvert.getInstance().audioToHls(filePath, targetPath);
		} else if (FileUtil.matchMimeType(mimeType, FileFormatEnum.VIDEO.mimeType)) {// 视频
			// 文件名作为名称
			File file = new File(filePath);
			String fileName = file.getName();
			String name = fileName.substring(0, fileName.lastIndexOf("."));
			String fileType = fileName.substring(fileName.lastIndexOf("."));
			if (fileType.toLowerCase().contains("mp4")) {
				// MP4不需要转换
				// 更新处理进度
				FileProcessProgressCache.putValue(identifier, 1, 1, "");
				return targetPath;
			} else {
				// 非mp4格式需要转换
				String folderPath = FfmpegFileVideoConvert.getInstance().videoToMp4(filePath, targetPath, name);
				// 更新处理进度
				FileProcessProgressCache.putValue(identifier, 1, 1, "");
				return folderPath;
			}
		} else {
			throw new ServiceException("不支持格式");
		}
	}

	/**
	 * 
	 * @description:
	 * @param inputStream
	 * @param fileName
	 * @param targetFileFormat
	 * @return
	 * @author: donghang
	 * @date: 2021年3月17日上午9:19:22
	 * @modify:
	 */
	@Override
	public String convertFile(String identifier, InputStream inputStream, String fileName,
			FileFormatEnum targetFileFormat) {
		return null;
	}

	/**
	 * 得到视频封面
	 * 
	 * @description:
	 * @param filePath
	 * @param targetPath
	 * @return
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月27日下午5:34:00
	 * @modify:
	 */
	@Override
	public String getFileEnvelope(String identifier, String filePath, String targetPath, String imagePrefix) {
		return FfmpegFileVideoConvert.getInstance().videoToImage(filePath, targetPath, imagePrefix);
	}
}
